//
//  XBQueue.h
//  数据结构算法和笔试题
//
//  Created by 王国栋 on 16/6/19.
//  Copyright © 2016年 xiaobai. All rights reserved.
//

#ifndef XBQueue_h
#define XBQueue_h
#include "BaseMsg.h"
#include <stdio.h>

#define  M 6

/**
 *  队列的实现：
 
 队列是一种允许在一端插入，在另一端删除的线性表
 C语言里面数组的下标是从0开始的，初始化队列的时候，令front=rear=-1,当插入新的元素的时候，rear+1
 当队头元素出队列的时候，队头指示器front+1，非空队列front总是指向队列中实际队头的前一个位置，尾指示器
 总是指向队尾元素

 */

typedef struct
{
    DATATYPE qm[MAX_SIZE];
    int front;//头指示器
    int rear;
}XBQueue;


typedef struct
{
    DATATYPE qm[6];//为了测试循环效果
    int front;//头指示器
    int rear;
}XBLoopQueue;

void initXBQueue(XBQueue*q);//初始化队列
int isXBQueueEmpty(XBQueue*q);//判断队列是否空
int isXBQueueFull(XBQueue*q);//判断是否满了
int getXBQueueLength(XBQueue q);
int insertXBQueue(XBQueue*q,DATATYPE m);//插入元素
int delXBQueueItem(XBQueue*q,DATATYPE *e);//删除
void printXBQueue(XBQueue q);

// -- 循环队列
void printXBLoopQueue(XBLoopQueue q);
int delXBLoopQueueItem(XBLoopQueue*q,DATATYPE *e);
int getXBLoopQueueLength(XBLoopQueue q);//获取长度
int isXBLoopQueueFull(XBLoopQueue*q);//判断是否满了
int isXBLoopQueueEmpty(XBLoopQueue*q);
void initXBLoopQueue(XBLoopQueue*q);//初始
int insertXBLoopQueue(XBLoopQueue*q,DATATYPE m);

#endif /* XBQueue_h */
